﻿using Microsoft.Practices.Prism.Logging ;
using System;
using System.Collections.Generic;

namespace OpenLightGroup.Prism
{
    public interface ICompositeLogger : ILoggerFacade
    {

        ILoggerFacade this[string key] { get; }

        T GetLogger<T>()
            where T : ILoggerFacade;
        
        T GetLogger<T>(string key)
                where T : ILoggerFacade;

        /// <summary>
        /// Uses keys to allow for multiple instances of the same type of logger.
        /// </summary>
        IEnumerable<KeyValuePair<string, ILoggerFacade>> Loggers { get; }

        void RegisterLogger(string key, ILoggerFacade logger);

        /// <summary>
        /// Will retrieve the instance of the logger from the ServiceLocator based on key 
        /// and add it to the list of loggers.
        /// </summary>
        /// <param name="key"></param>
        void RegisterLogger(string key);

        void UnregisterLogger(string key);
    }

  
}